package net.tinyportal.service;


import java.util.HashMap;
import java.util.Map;

import net.tinyportal.javax.portlet.TpPortletPreference;
import net.tinyportal.persistence.PreferenceDao;
import net.tinyportal.persistence.entity.Preference;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service 
public class PreferenceService {

	@Autowired 
	private PreferenceDao preferenceDao;

	@Autowired PortletService portletService;


	public Preference getValue(int id) {
		return preferenceDao.findById(id);
	}


	/**
	 *  Map pour la conservation des préférences des différentes instances de portlet
	 */
	Map<String, TpPortletPreference> portletsPreference = new HashMap<String, TpPortletPreference>();

	/**
	 * Recupère les préférences d'une instance de portlet,
	 * si aucune préférence n'existe, un nouvel objet est crée a partir des préférences du type
	 * de portlet
	 * @param portletId id du portlet
	 * @return
	 */
	public TpPortletPreference getPreferenceForPortletName(String portletName) {
//		Preference preference = preferenceDao.findByPortletId(portletName);
		if (portletsPreference.containsKey(portletName)) { 
			return portletsPreference.get(portletName);
		} else {
			String portletInstanceName = portletService.getPortletName(portletName);
			TpPortletPreference portletPreference = portletsPreference.get(portletInstanceName).clone();
			portletsPreference.put(portletName, portletPreference);

			return portletPreference; 
		}
	}

	public void addPreference(String portletName, TpPortletPreference preference) {
		portletsPreference.put(portletName,preference);
	}

	public void storePreference(TpPortletPreference TpPreference) {
		try {
			Preference p = new Preference();
			String portletName = null;
			for (String portlet: portletsPreference.keySet()) {
				if (portletsPreference.get(portlet) == TpPreference ) {
					portletName = portlet;
					break;
				}
			}

			if (portletName == null) {
				throw new Exception ("No portlet associated with these preferences");
			} else {
				p.setPortletId(portletName);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
